home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / More Source / Libraries / SAT 2.3b4 / Demo ƒ / HeartQuest demo ƒ / sBonus.p < prev    next >
Text File  |  1995-01-16  |  2KB  |  97 lines

  1. {===============================================}
  2. {================= Bonus sprite unit ================}
  3. {===============================================}
  4.  
  5. { Example file for Ingemars Sprite Animation Toolkit. }
  6. { © Ingemar Ragnemalm 1992 }
  7. { See doc files for legal terms for using this code. }
  8.  
  9. unit sBonus;
  10.  
  11. { Sprite unit. A sprite unit should include the following routines:}
  12. { Init-procedure, that initializes private bitmaps}
  13. { Setup-procedure, that sets variables other than the standard ones set by MakeSprite }
  14. { Handle-procedure, to be called once per iteration until the sprite dies }
  15. { Hittask-procedure (optional), for advanced collission handling. }
  16.  
  17. interface
  18.  
  19.     uses
  20. {$IFC UNDEFINED THINK_PASCAL}
  21.         Types, Quickdraw, 
  22. {$ENDC}
  23.         SAT, sPoints, scores, SoundConst, GameGlobals;
  24.  
  25.     procedure InitBonus;
  26.     procedure SetupBonus (mp: SpritePtr);
  27.     procedure HandleBonus (me: SpritePtr);
  28.  
  29. implementation
  30.  
  31.     var
  32.         BonusFace: array[1..3] of FacePtr;
  33.  
  34.     procedure InitBonus;
  35.         var
  36.             ii: integer;
  37.             h: handle;
  38.     begin
  39.         for ii := 1 to 3 do
  40.             begin
  41.                 BonusFace[ii] := SATGetFace(127 + ii);
  42.             end;
  43.     end;
  44.  
  45.     procedure SetupBonus (mp: SpritePtr);
  46.         var
  47.             i: integer;
  48.     begin
  49.         i := SATRand(3) + 1;
  50.         mp^.face := BonusFace[i];
  51. {mp^.mask := Bonusmask[i];}
  52.  
  53.         if mp^.position.h < 300 then
  54.             mp^.speed.h := 5
  55.         else
  56.             mp^.speed.h := -5;
  57.         SetRect(mp^.hotRect, -13 + 16, -28 + 32, 13 + 16, 0 + 32);
  58.  
  59.         mp^.task := @HandleBonus;
  60.     end;
  61.  
  62.     procedure HandleBonus (me: SpritePtr);
  63.         var
  64.             mp: Spriteptr;
  65.     begin
  66.         if me^.kind <> -4 then
  67.             begin
  68.                 me^.task := nil; { Caught by the player! }
  69.                 AddScore(50);
  70.                 mp := SATNewSprite(0, me^.position.h, me^.position.v, @SetupPoints);
  71.                 SATSoundPlay(jaSndH, 5, true);
  72.  
  73.                 bonusesCollected := bonusesCollected + 1;
  74.             end
  75.         else
  76.             begin
  77.                 bonusObjectRunning := true;
  78.                 if not features^^.macho then
  79.                     levelCompleted := false;
  80.             end;
  81.  
  82.         me^.mode := me^.mode + 1;
  83.  
  84.         me^.position.h := me^.position.h + me^.speed.h;
  85.         if me^.position.h > gSAT.offSizeH then
  86.             begin
  87.                 me^.task := nil;
  88. {bonusLevelWanted := false; {Missed the bonus!}
  89.             end;
  90.         if me^.position.h < -32 then
  91.             begin
  92.                 me^.task := nil;
  93. {bonusLevelWanted := false; {Missed the bonus!}
  94.             end;
  95.     end;
  96.  
  97. end.